// 引入 Koa 包
const Koa = require("koa");
// 引入 MySQL 包，去链接 MySQL 服务器
const mysql = require("mysql");

// 创建 Koa web 实例
const app = new Koa();

// 第一个中间件
app.use(async (ctx) => {
    // 创建链接
    const con = mysql.createConnection({
        host: "localhost",
        port: 3306,
        user: "root",
        password: "root",
        database: "koa-api",
    });

    // 让 JS 引擎等待
    // await 右侧只能跟 Promise 对象
    // Promise 就是用来封装异步操作的
    // await 会一直等待，等待什么呢？
    // 等待这个 Promise 对象被 resolve 或者 reject 时，才会继续向下执行
    const data = await new Promise((resolve, reject) => {
        // 发送 SQL 语句
        con.query("select * from user", [], (error, data) => {
            if (error) {
                reject(error);
            } else {
                resolve(data);
            }
            // 告诉服务器，我执行完了，不发 SQL 了。
            con.end();
        });
    });

    // 将数据返回给客户端
    ctx.body = data;
});

app.listen(3000, () => {
    console.log("Koa server running at http://localhost:3000");
});
